#!/bin/bash
##############################################################################
##                                                                          ##
## Скрипт пытается удалить пакеты и исходники из локального репозитория     ##
## созданого программой reprepro                                            ##
##                                                                          ##
##############################################################################
function help()
{
echo "repo-rm - Скрипт удаляет пакеты и исходники, из локального репозитория,
созданого программой reprepro

Использование:
repo-rm [параметры] [опции] имя_пакета

Параметры:
-R REP_PATH:		Корневой каталог репозитория (указывать не нужно)
-C COMPONENT:		раздел репозитория (main/cache/cdrom), по умолчанию main
-N CODENAME:		кодовое имя дистрибутива, (lenny/squeeze/...), по
			умолчанию local_current

Опции:
По умолчанию скрипт удаляет пакеты (.deb and .udeb) и исходники, что аналогично
опции -a. Данные опции заставляют его работать по другому:
-s:			Удалить исходники (.dsc, .diff.gz and .orig.tar.gz)
-p:			Удалить пакеты (.deb and .udeb)
-a:			Удалить пакеты и исходники (по умолчанию)"
}
##############################################################################

# default parameters
REP_PATH=/home/repo-deb #ПАПКА РЕПОЗИТОРИЯ ПО УМОЛЧАНИЮ. ИЗМЕНИТЬ НА СВОЮ !!!

COMPONENT="main"
CODENAME="local_current"

# default options
opt_all=1
opt_source=""
opt_pack=""


# Function parse options -s -a -p
# $1 - options string
function option_parse ()
{
opt=${1/"-"/""}
if [ `expr match "$opt" ".*\([a]\)"` ]; then
	opt_all=1
	return
fi

if [ `expr match "$opt" ".*\([p]\)"` ]; then
	opt_pack=1
	opt_all=""
fi

if [ `expr match "$opt" ".*\([s]\)"` ]; then
	opt_source=1
	opt_all=""
fi
}

# Maximum parameters count
Num=0
# Filling the array of input parameters
for input_param in $*
do
	let "Num++" # Increment Num
	params[$Num]=$input_param
done

# Main checking cycle (check input parameters)
pkg_num=0
for ((i=1; i <= Num ; i++))
do
case ${params[$i]} in

"-R") 	REP_PATH=${params[$i+1]}
	let "i++";;

"-C") 	COMPONENT=${params[$i+1]}
	let "i++";;

"-N") 	CODENAME=${params[$i+1]}
	let "i++";;

-[sap]* ) options=`expr match "${params[$i]}" "\(-[sap]*$\)"`
	if [ "$options" = "" ]; then
		params[$Num+1]="-exit"
		params[$Num+2]=`expr match "${params[$i]}" "\(-[sap]*\)"`
		let "Num+=2"
	else option_parse $options
	fi;;

[^-]* ) let "pkg_num++"
	packages[pkg_num]=${params[$i]};;

"-h" | "--help" ) help
	exit;;
	
* ) 	echo "Указан не допустимый параметр или опция. Для деталей смотрите $0 --help"
	exit;;
esac
done

# Remove packages in repository
# $1 - remove mode (removesrc/remove)
function rm_packages()
{
	reprepro -V -b $REP_PATH -C $COMPONENT --morguedir "+b/trash" $1 $CODENAME ${packages[*]}
}


if [ -z "${packages[1]}" ]; then
	ans="n"
	echo -n "Вы действительно хотите удалить все пакеты в $CODENAME/$COMPONENT y/N:"
	read ans
	if [ "$ans" != "y" ]; then
		echo Отмена!
		exit
	fi
	echo Пока не реализовано!
	exit
fi

if [ $opt_all ]; then
	opt_source=1
	opt_pack=1
fi

if [ $opt_source ]; then
	rm_packages removesrc
fi

if [ $opt_pack ]; then
	rm_packages remove
fi
